import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

//
public class StudentManager {

    // 创建一个集合用来保存用户添加的学生信息
    private static List<Student> studentList = new ArrayList<>();

    private static String fileName = "student.db"; // 保持文件的名称


    // psvm:快速生成main方法
    // sout:快速生成输入语句
    // alt+回车：快速创建一个方法
    public static void main(String[] args) {
        // 1.创建一个扫描器
        Scanner scanner = new Scanner(System.in);

        // 加载数据文件
        loadData();

        while (true) {
            System.out.println("1:添加学生、2:查询学生、3:删除学生、4：修改学生、5:落盘、6：客服、7：退出");
            // 2.接收键盘输入
            int i = scanner.nextInt();

            // 3.判断用户输入的操作
            if (i == 1) {
                // 1.让用户输入学生的信息
                System.out.println("请输入学生学号:");
                int no = scanner.nextInt();
                System.out.println("请输入学生的姓名:");
                String name = scanner.next();
                System.out.println("请输入学生的年龄:");
                int age = scanner.nextInt();
                System.out.println("请输入学生的性别:");
                String sex = scanner.next();

                System.out.println("请输入学生的手机号");
                String mobile = scanner.next();

                // 2.把用户输入的属性封装到一个Stuent对象中
                Student stu = new Student(name, age, no, mobile, sex);

                // 3.把添加的学生给保存起来(MySQL-->集合(数组))
                studentList.add(stu);

                System.out.println("【" + name + "】已添加成功");
            } else if (i == 2) {
                // 读取集合中的内容
                for (Student student : studentList) {
                    System.out.println(student);
                }
            } else if (i == 3) {
                System.out.println("请输入要删除学生学号:");
                int no = scanner.nextInt();
                boolean isDelete = false; // 这个标志用来定义是否删除成功
                for (Student student : studentList) {
                    // 用集合中学生的学号和用户输入学号进行对比
                    if (student.getNo() == no) {
                        // 如果学号一样就说明找到了，从集合中删除即可
                        studentList.remove(student);
                        isDelete = true; // 修改标志为删除成功
                        System.out.println("【" + student.getName() + "】删除成功");
                        break; // 找到后就直接返回，没必要放下走了
                    }
                }
                if (!isDelete) {
                    System.out.println("【" + no + "】学生不存在");
                }
            } else if (i == 4) {

                System.out.println("请输入要修改学生的学号");
                int no = scanner.nextInt();

                // 按照学号去查询这个学生是否存在
                Student stu = null;
                for (Student student : studentList) {
                    if (student.getNo() == no) {
                        stu = student;
                        continue;
                    }
                }

                // 判断是否找到学生
                if (stu == null) {
                    System.out.println("【" + no + "】学生不存在");
                    continue;
                }

                // 这里就要修改它的属性
                boolean isUpdate = true;
                while (isUpdate) {
                    System.out.println("请输入要修改的学生的属性:");
                    String att = scanner.next();

                    System.out.println("请输入要修改学生的属性值:");
                    String val = scanner.next();

                    if ("name".equals(att)) {
                        stu.setName(val);
                    } else if ("age".equals(att)) {
                        stu.setAge(Integer.parseInt(val));
                    } else if ("mobile".equals(att)) {
                        stu.setMobile(val);
                    }
                    System.out.println("是否继续修改?(y/n)");
                    String next = scanner.next();
                    if ("n".equals(next)) {
                        System.out.println("修改完成");
                        isUpdate = false;
                    }
                }
            } else if (i == 5) {
                // 把studentList保存到文件中
                saveDateFile();
            } else if (i == 6) {
                System.out.println("进入客服模式");
                boolean isSession = true;
                while (isSession) {
                    System.out.println("输入你要发送的消息(退出客服模式exit):");
                    String msg = scanner.next();
                    if ("exit".equals(msg)) {
                        System.out.println("退出客服模式");
                        isSession = false;
                    }else{
                        // 把这个msg发送给GPT就可以了
                        String resp = GptUtils.getMsg(msg);
                        System.out.println("【客服】:" + resp);
                    }
                }
            } else if (i == 7) {
                // 退出之前先调用落盘方法
                saveDateFile();
                System.out.println("bye bye ....");
                System.exit(-1); // 终止虚拟机
            }
        }
    }

    private static void saveDateFile() {
        ObjectOutputStream ops = null;
        try {
            ops = new ObjectOutputStream(new FileOutputStream("./" + fileName));
            ops.writeObject(studentList); // 保存集合到文件中
            System.out.println("落盘成功");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (ops != null) {
                try {
                    ops.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }

    // 读取数据文件
    private static void loadData() {
        ObjectInputStream ips = null;
        try {
            ips = new ObjectInputStream(new FileInputStream("./" + fileName));
            studentList = (List<Student>) ips.readObject();
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            if (ips != null) {
                try {
                    ips.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }
}
